home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 7 / Amiga Format AFCD07 (Dec 1996, Issue 91).iso / serious / shareware / programming / ixemul-complete / ixemul / utils / functions.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-18  |  8.3 KB  |  342 lines

  1. /*
  2.     Ixprefs v.2.3--ixemul.library configuration program
  3.     Copyright © 1995,1996 Kriton Kyrimis
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19. #include <stdio.h>
  20. #include <string.h>
  21. #include <exec/types.h>
  22. #include <intuition/intuition.h>
  23. #include <proto/dos.h>
  24. #include <proto/intuition.h>
  25. #include "ixprefs.h"
  26. #include "ixemul.h"
  27. #include "version.h"
  28.  
  29. #define IXPREFS_VERSION "2.3"
  30.  
  31. #define RUNNING 1
  32. #define NOT_RUNNING 0
  33.  
  34. #define CONFIGFILE "ENVARC:" IX_ENV_SETTINGS
  35. #define ENVFILE "ENV:" IX_ENV_SETTINGS
  36.  
  37. /* These strings are long enough to have a high probability of being typed
  38.    incorrectly, especially as they are used more than once. Using these
  39.    definitions, we can detect typing errors at compile time */
  40. #define IX_NO_INSERT_DISK_REQUESTER "ix_no_insert_disk_requester"
  41. #define IX_UNIX_PATTERN_MATCHING_CASE_SENSITIVE "ix_unix_pattern_matching_case_sensitive"
  42. #define IX_WATCH_STACK "ix_watch_stack"
  43. #define IX_TRANSLATE_SLASH "ix_translate_slash"
  44. #define IX_MEMBUF_LIMIT "ix_membuf_limit"
  45. #define IX_RED_ZONE_SIZE "ix_red_zone_size"
  46. #define IX_FS_BUF_FACTOR "ix_fs_buf_factor"
  47. #define IX_ALLOW_AMIGA_WILDCARD "ix_allow_amiga_wildcard"
  48.  
  49. extern void showrequester(struct Window*, char *, char *);
  50.  
  51. extern struct ixemul_base *ixemulbase;
  52. extern int translateslash, membuf, watcher, redzone, blocks, cases, suppress,
  53.        amigawildcard, noflush, ignoreenv, networking, enforcerhit,
  54.        profilemethod;
  55.  
  56. struct ix_settings settings;
  57.  
  58. extern void displayprefs(void);
  59.  
  60. void
  61. use(void)
  62. {
  63.   FILE *f;
  64.   unsigned long new_flags;
  65.  
  66.   new_flags =
  67.     (translateslash ? ix_translate_slash : 0)
  68.   | (watcher ? ix_watch_stack : 0)
  69.   | (cases ? ix_unix_pattern_matching_case_sensitive : 0)
  70.   | (suppress ? ix_no_insert_disk_requester : 0)
  71.   | (amigawildcard ? ix_allow_amiga_wildcard : 0)
  72.   | (noflush ? ix_do_not_flush_library : 0)
  73.   | (ignoreenv ? ix_ignore_global_env : 0)
  74.   | (enforcerhit ? ix_create_enforcer_hit : 0)
  75.   | (profilemethod << 14);
  76.   settings.version = IX_VERSION;
  77.   settings.revision = IX_REVISION;
  78.   settings.flags = new_flags;
  79.   settings.membuf_limit = membuf;
  80.   settings.red_zone_size = redzone;
  81.   settings.fs_buf_factor = blocks;
  82.   settings.network_type = networking;
  83.   ix_set_settings(&settings);
  84.   f = fopen(ENVFILE, "w");
  85.   if (f) {
  86.     fwrite(&settings, sizeof(settings), 1, f);
  87.     fclose(f);
  88.   } else {
  89.     showrequester(ixprefsWnd, "Can't open " ENVFILE, "OK");
  90.   }
  91. }
  92.  
  93. void
  94. save(void)
  95. {
  96.   FILE *f;
  97.  
  98.   use();
  99.   f = fopen(CONFIGFILE, "w");
  100.   if (f) {
  101.     fwrite(&settings, sizeof(settings), 1, f);
  102.     fclose(f);
  103.   }else{
  104.     showrequester(ixprefsWnd, "Can't open " CONFIGFILE, "OK");
  105.   }
  106. }
  107.  
  108. int
  109. selected(int which)
  110. {
  111.   if (ixprefsGadgets[which]->Flags & GFLG_SELECTED) {
  112.     return 1;
  113.   }else{
  114.     return 0;
  115.   }
  116. }
  117.  
  118. int savegadClicked( void )
  119. {
  120.   /* routine when gadget "Save" is clicked. */
  121.   save();
  122.   return NOT_RUNNING;
  123. }
  124.  
  125. int usegadClicked( void )
  126. {
  127.   /* routine when gadget "Use" is clicked. */
  128.   use();
  129.   return NOT_RUNNING;
  130. }
  131.  
  132. int cancelgadClicked( void )
  133. {
  134.   /* routine when gadget "Cancel" is clicked. */
  135.   return NOT_RUNNING;
  136. }
  137.  
  138. int translateslashClicked( void )
  139. {
  140.   /* routine when gadget "translate /" is clicked. */
  141.   translateslash = selected(GDX_translateslash);
  142.   return RUNNING;
  143. }
  144.  
  145. int membufClicked( void )
  146. {
  147.   /* routine when gadget "membuf size" is clicked. */
  148.   membuf = GetNumber(ixprefsGadgets[GDX_membuf]);
  149.   return RUNNING;
  150. }
  151.  
  152. int redzoneClicked( void )
  153. {
  154.   /* routine when gadget "red zone size" is clicked. */
  155.   redzone = GetNumber(ixprefsGadgets[GDX_redzone]);
  156.   return RUNNING;
  157. }
  158.  
  159. int watcherClicked( void )
  160. {
  161.   /* routine when gadget "enable stack watcher" is clicked. */
  162.   watcher = selected(GDX_watcher);
  163.   return RUNNING;
  164. }
  165.  
  166. int blocksClicked( void )
  167. {
  168.   /* routine when gadget "physical blocks to build one logical block (for stdio)" is clicked. */
  169.   blocks = GetNumber(ixprefsGadgets[GDX_blocks]);
  170.   return RUNNING;
  171. }
  172.  
  173. int caseClicked( void )
  174. {
  175.   /* routine when gadget "case sensitive)" is clicked. */
  176.   cases = selected(GDX_case);
  177.   return RUNNING;
  178. }
  179.  
  180. int suppressClicked( void )
  181. {
  182.   /* routine when gadget "suppress the \"Insert volume in drive\" requester" is clicked. */
  183.   suppress = selected(GDX_suppress);
  184.   return RUNNING;
  185. }
  186.  
  187. int networkingClicked( void )
  188. {
  189.   /* routine when cycle gadget "Networking support" is clicked. */
  190.   networking = ixprefsMsg.Code;
  191.   return RUNNING;
  192. }
  193.  
  194. int profilemethodClicked( void )
  195. {
  196.   /* routine when cycle gadget "Profile method" is clicked. */
  197.   profilemethod = ixprefsMsg.Code;
  198.   return RUNNING;
  199. }
  200.  
  201. int amigawildcardClicked( void )
  202. {
  203.   /* routine when gadget "allow Amiga wildcards" is clicked. */
  204.   amigawildcard = selected(GDX_amigawildcard);
  205.   return RUNNING;
  206. }
  207.  
  208. int noflushClicked( void )
  209. {
  210.   /* routine when gadget "do not flush library" is clicked. */
  211.   noflush = selected(GDX_noflush);
  212.   return RUNNING;
  213. }
  214.  
  215. int ignoreenvClicked( void )
  216. {
  217.   /* routine when gadget "ignore global environment (ENV:)" is clicked. */
  218.   ignoreenv = selected(GDX_ignoreenv);
  219.   return RUNNING;
  220. }
  221.  
  222. int enforcerhitClicked( void )
  223. {
  224.   /* routine when gadget "Create Enforcerhit on trap" is clicked. */
  225.   enforcerhit = selected(GDX_enforcerhit);
  226.   return RUNNING;
  227. }
  228.  
  229. int ixprefssave( void )
  230. {
  231.   /* routine when (sub)item "Save" is selected. */
  232.   save();
  233.   return NOT_RUNNING;
  234. }
  235.  
  236. int ixprefsuse( void )
  237. {
  238.   /* routine when (sub)item "Use" is selected. */
  239.   use();
  240.   return NOT_RUNNING;
  241. }
  242.  
  243. int ixprefsabout( void )
  244. {
  245.   /* routine when (sub)item "About" is selected. */
  246.   showrequester(ixprefsWnd,
  247.     "Ixprefs v." IXPREFS_VERSION "--ixemul.library configuration program\n"
  248.     "Copyright \251 1995,1996 Kriton Kyrimis\n\n"
  249.     "This program is free software; you can redistribute it\n"
  250.     "and/or modify it under the terms of the GNU General\n"
  251.     "Public License as published by the Free Software Foundation;\n"
  252.     "either version 2 of the License, or (at your option)\n"
  253.     "any later version.\n\n"
  254.     "GUI designed using GadToolsBox 2.0c by Jan van den Baard",
  255.     "OK");
  256.   return RUNNING;
  257. }
  258.  
  259. int ixprefsquit( void )
  260. {
  261.   /* routine when (sub)item "Quit" is selected. */
  262.   return NOT_RUNNING;
  263. }
  264.  
  265. void read_from_settings(struct ix_settings *settings)
  266. {
  267.   translateslash = (settings->flags & ix_translate_slash) != 0;
  268.   watcher = (settings->flags & ix_watch_stack) != 0;
  269.   cases = (settings->flags & ix_unix_pattern_matching_case_sensitive) != 0;
  270.   suppress = (settings->flags & ix_no_insert_disk_requester) != 0;
  271.   amigawildcard = (settings->flags & ix_allow_amiga_wildcard) != 0;
  272.   noflush = (settings->flags & ix_do_not_flush_library) != 0;
  273.   ignoreenv = (settings->flags & ix_ignore_global_env) != 0;
  274.   enforcerhit = (settings->flags & ix_create_enforcer_hit) != 0;
  275.   membuf = settings->membuf_limit;
  276.   redzone = settings->red_zone_size;
  277.   blocks = settings->fs_buf_factor;
  278.   networking = settings->network_type;
  279.   profilemethod = (settings->flags >> 14) & 3;
  280. }
  281.  
  282. void defaults(void)
  283. {
  284.   read_from_settings(ix_get_default_settings());
  285. }
  286.  
  287. int ixprefsreset(void)
  288. {
  289.   /* routine when (sub)item "Reset to defaults" is selected. */
  290.  
  291.   defaults();
  292.   displayprefs();
  293.   return RUNNING;
  294. }
  295.  
  296. int
  297. last_saved(void)
  298. {
  299.   FILE *f;
  300.   int status;
  301.  
  302.   f = fopen(CONFIGFILE, "r");
  303.   if (f) {
  304.     fread(&settings, sizeof(settings), 1, f);
  305.     fclose(f);
  306.     read_from_settings(&settings);
  307.     status = 0;
  308.   }else{
  309.     showrequester(ixprefsWnd, "Can't open " CONFIGFILE, "OK");
  310.     status = 1;
  311.   }
  312.   return status;
  313. }
  314.  
  315. int ixprefslast( void )
  316. {
  317.   /* routine when (sub)item "Last Saved" is selected. */
  318.   if (last_saved() == 0) {
  319.     displayprefs();
  320.   }
  321.   return RUNNING;
  322. }
  323.  
  324. int ixprefsrestore( void )
  325. {
  326.   struct ix_settings *settings;
  327.  
  328.   /* routine when (sub)item "Restore" is selected. */
  329.   settings = ix_get_settings();
  330.   read_from_settings(settings);
  331.  
  332.   displayprefs();
  333.  
  334.   return RUNNING;
  335. }
  336.  
  337. int ixprefsCloseWindow( void )
  338. {
  339.   /* routine for "IDCMP_CLOSEWINDOW". */
  340.   return NOT_RUNNING;
  341. }
  342.